#ifndef __UTIL_MEM_H__
#define __UTIL_MEM_H__

#include <stdint.h>

#define UTILMEM_CFG_INSTANCE_NUM        1
#define UTILMEM_CFG_NAME_MAX_LEN        16
#define UTILMEM_CFG_BYTE_ALIGN          8
#define UTILMEM_CFG_LOG_EN              0

#if UTILMEM_CFG_INSTANCE_NUM

typedef uint32_t UtilPointSizeType;

#define UTILMEM_RETURN_OK           	0
#define UTILMEM_RETURN_NAME_EXIST   	1
#define UTILMEM_RETURN_INSTANCE_FULL	2
#define UTILMEM_RETURN_REGION_COVER		3

uint8_t UtilMemCreate(uint8_t *block, size_t block_size, const char *name);
void *UtilMemMalloc(const char *name, size_t size);
void *UtilMemCalloc(const char *name, size_t nitems, size_t size);
void UtilMemFree(const char *name, void *pv);

#if UTILMEM_CFG_LOG_EN
    #include "sys_log.h"

    #define UtilLogI(tag, format, ...)	SysLogI(tag, format, ##__VA_ARGS__)
    #define UtilLogW(tag, format, ...)	SysLogW(tag, format, ##__VA_ARGS__)
    #define UtilLogE(tag, format, ...)	SysLogE(tag, format, ##__VA_ARGS__)
#else
    #define UtilLogI(tag, format, ...)
    #define UtilLogW(tag, format, ...)
    #define UtilLogE(tag, format, ...)
#endif

#endif

#endif
